package main

/**
GoLang不存在Java那样的异常机制，无法像Java一样抛出异常
Go提供了恐慌（Panic）与恢复（Recover）机制。
这是最后的手段，代码中应减少这样的存在，或者说不要给他有出现的机会
但真的要使用就好好受用，这是一款强大的武器


Panic
	这是一个内建函数，可以中断原有的控制流程，进入慌恐（Panic）的流程中。
	当一个函数调用panic，这个函数就会被中断执行，如果这个函数存在defer
	的延迟语句，就会执行延迟语句，然后这个方法就会被返回到调用它的地方。
	而在调用的地方，会继续向上返回，直到整个程序崩溃时虽有的goroutine
	返回

Recover
	是一个内建函数，可以让进入恐慌（Panic）的流程中的goroutine恢复
	执行。recover仅能在延迟代码也就是defer执行。
	在正常的执行过程中，调用defer会返回nil并且没有任何其他效果，如果当前
	的goroutine陷入恐慌（panic），调用recover可以捕捉到panic的输入值，
	并且恢复正常的执行
*/

func main() {

}

func throwsPanic(f func()) (b bool) {
	defer func() {
		if x := recover(); x != nil { //如果当前流程处于恐慌（panic），那么recover会将恢复，但处于正常流程得话，就会返回nil
			b = true
		}
	}()
	f()
	return
}
